#ifndef MCMC_BOTTOMUP_CUE_H
#define MCMC_BOTTOMUP_CUE_H

#include "mcPublic.h"
#include "mcmcImageFilters.h"


/////////////////////////////////////////////
/////////////////////////////////////////////
enum TypeOfCue
{
	/*
	TOC_Intensity: return MODEL_INTENSITY_GAUSS;
	TOC_Smooth: return MODEL_INTENSITY_SURFACE;
	TOC_Texture: return MODEL_INTENSITY_DELTA;
	TOC_Face:
	TOC_Text:;
	*/

	TOC_Intensity=0,
	TOC_Smooth=1,
	TOC_Texture=2,
	TOC_Face=3,
	TOC_Text=4,
	TOC_2DColor=5,
	TOC_3DColor=6,
	TOC_3DColor_Mix=7,
	TOC_LUVColor=8,
	TOC_LUVColorMix=9,
	TOC_LUVSurface=10

};

class MCMC_BtmupCue
{
public:
	virtual ~MCMC_BtmupCue(){;};

	char	ch_id;
};

typedef MCMC_BtmupCue* PMCMC_BtmupCue;

/////////////////////////////////////////////
/////////////////////////////////////////////
class MCMC_CueLocalGaussian : public MCMC_BtmupCue
{
public:
	virtual ~MCMC_CueLocalGaussian(){;};

	float mean;
	float var;
};

/////////////////////////////////////////////
/////////////////////////////////////////////
class MCMC_CueEdge : public MCMC_BtmupCue
{
public:
	virtual ~MCMC_CueEdge(){;};

	float	g;
	float	theta;
};

/////////////////////////////////////////////
/////////////////////////////////////////////
class MCMC_CueFace : public MCMC_BtmupCue
{
public:

	float	q;
};


/////////////////////////////////////////////
/////////////////////////////////////////////
class MCMC_CueAtPixel
{
public:
	// construction & destruction
	MCMC_CueAtPixel();
	~MCMC_CueAtPixel();
	void Free(void);

	// operations
	void	InitAsLevelOne(void);
	inline MCMC_BtmupCue*	GetCue(const int cue);

protected:
	PMCMC_BtmupCue	*p_cues;
	int			num_cues;
};

inline MCMC_BtmupCue* MCMC_CueAtPixel::GetCue(const int cue)
{
	if (cue>=0 && cue<num_cues)
		return p_cues[cue];
	else
		return NULL;
}


/////////////////////////////////////////////
/////////////////////////////////////////////
class MCMC_ImageBtmupCues
{
public:
	// construction & destruction
	MCMC_ImageBtmupCues();
	~MCMC_ImageBtmupCues();

	void	Set(MCMC_FilterResp &filter_resp);

	SimpleMatrix<MCMC_CueAtPixel>	mx_cue_pixel;
};



#endif
